package com.czg.jsonschema2lombokpojo;

import java.io.File;
import java.util.Comparator;

/**
 * 定义处理源文件和目录的顺序。
 */
public enum SourceSortOrder {
    /**
     * <code>OS</code>让操作系统影响源文件的处理顺序。
     */
    OS {
        @Override
        public Comparator<File> getComparator() {
            return (a, b) -> a.compareTo(b);
        }
    },

    /**
     * <code>FILES_FIRST</code>区分大小写排序，先访问文件。源文件以宽度优先排序顺序处理。
     */
    FILES_FIRST {
        @Override
        public Comparator<File> getComparator() {
            return new Comparator<File>() {
                @Override
                public int compare(final File fileA, final File fileB) {
                    if (fileA.isDirectory() && !fileB.isDirectory()) {
                        return 1;
                    }

                    if (!fileA.isDirectory() && fileB.isDirectory()) {
                        return -1;
                    }
                    return fileA.compareTo(fileB);
                }
            };
        }
    },

    /**
     * <code>SUBDIRS_FIRST</code>区分大小写排序，访问文件前的子目录。源文件按深度优先排序顺序处理。
     */
    SUBDIRS_FIRST {
        @Override
        public Comparator<File> getComparator() {
            return new Comparator<File>() {
                @Override
                public int compare(final File fileA, final File fileB) {
                    if (fileA.isDirectory() && !fileB.isDirectory()) {
                        return -1;
                    }

                    if (!fileA.isDirectory() && fileB.isDirectory()) {
                        return 1;
                    }
                    return fileA.compareTo(fileB);
                }
            };
        }
    };

    public abstract Comparator<File> getComparator();
}
